package org.thistlesoft.core.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Properties;

import org.thistlesoft.core.utils.Page;

/**
 * GenericDao DAO层泛型接口，定义基本的DAO功能
 * @author Administrator
 *
 * @param <T>
 */
public interface GenericDao<T, PK extends Serializable> {

	/**
	 * 根据主键查询entity
	 * @param id
	 * @return
	 */
	public abstract T get(PK primaryKey);
	
	/**
	 * 返回所有entity集合
	 * @return
	 */
	public abstract List<T> getAll();
	
	/**
	 * 分页查询
	 * @param pageNo
	 * @param pageSize
	 * @param prop
	 * @return
	 */
	public abstract Page<T> pagedQuery(int pageNo, int pageSize, Properties prop);
	
	/**
	 * 插入entity
	 * @param t
	 * @return
	 */
	public abstract void insert(T t);
	
	/**
	 * 根据主键删除
	 * @param id
	 */
	public abstract int delete(PK primaryKey);
	
	/**
	 * 根据主键批量删除
	 * @param id
	 */
	public abstract int batchRemove(String[] ids);
	
	/**
	 * 更新entity
	 * @param o
	 * @return
	 */
	public abstract int update(T entity);
}
